/*
 * The NIE (Número de Identificación de Extranjero) is a Spanish tax identification number assigned by the Spanish
 * authorities to any foreigner.
 *
 * The NIE is the equivalent of a Spaniards Número de Identificación Fiscal (NIF) which serves as a fiscal
 * identification number. The CIF number (Certificado de Identificación Fiscal) is equivalent to the NIF, but applies to
 * companies rather than individuals. The NIE consists of an 'X' or 'Y' followed by 7 or 8 digits then another letter.
 */
$.validator.addMethod("nieES", function (value, element) {
    "use strict";

    if (this.optional(element)) {
        return true;
    }

    var nieRegEx = new RegExp(/^[MXYZ]{1}[0-9]{7,8}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/gi);
    var validChars = "TRWAGMYFPDXBNJZSQVHLCKET",
        letter = value.substr(value.length - 1).toUpperCase(),
        number;

    value = value.toString().toUpperCase();

    // Quick format test
    if (value.length > 10 || value.length < 9 || !nieRegEx.test(value)) {
        return false;
    }

    // X means same number
    // Y means number + 10000000
    // Z means number + 20000000
    value = value.replace(/^[X]/, "0")
        .replace(/^[Y]/, "1")
        .replace(/^[Z]/, "2");

    number = value.length === 9 ? value.substr(0, 8) : value.substr(0, 9);

    return validChars.charAt(parseInt(number, 10) % 23) === letter;

}, "Please specify a valid NIE number.");
